import type { User } from '@/env.d'
import request from '@/utils/request'
import type { AuthServiceId } from '@/utils/oAuth'
/**
 * 通过用户名密码获取带token的用户信息
 *
 * @augments data { name: string, pswd: string }
 */
export const login = (
	data :
		| {
			name : string
			pswd : string
		}
		| {
			unionidQq : string
		}
) => {
	return request<User>({
		url: 'user/login',
		method: 'POST',
		data,
	})
}

/**
 * 通过token获取用户信息，没找到返回null
 *
 * @augments data { name: string, pswd: string }
 */
export const getUser = (
	data : { token : string } | { openidQ : string } | { id : string }
) : Promise<User> => {
	return request({
		url: 'user/get_user',
		data,
	})
}

/**
 * 查用户名有没有，返回0或1，不区分大小写
 * name 优先级高于 openId
 *
 * @augments data { name: string }
 */
export const haveUser = (
	data : { name : string } | { unionidQq : string }
) : Promise<number> => {
	return request({
		url: 'user/have_user',
		data,
	})
}

/**
 * 注册 user/signin/signin
 * 用户ID  -1验证码错误 0用户名已存在
 *
 * @augments data { name: string }
 */
export const signin = (data : {
	name : string
	pswd : string
	captcha : string
}) : Promise<number> => {
	return request({
		url: 'user/signin/signin',
		method: 'POST',
		data,
	})
}

/**
 * 更新用户设置 user/update_setting
 *
 * @augments setting 用户设置的JSON字符串
 * @return 受影响的条数
 */
export const updateSetting = (data : {
	token ?: string
	settingJson : string
}) : Promise<number> => {
	return request({
		url: 'user/update_setting',
		method: 'POST',
		data: { token: uni.getStorageSync('token'), ...data },
	})
}

/**
 * 更新用户数据 user/update_user
 *
 * @augments userJson userEdit
 * @return 受影响的条数
 */
export const updateUser = (data : {
	token ?: string
	userJson : string
}) : Promise<number> => {
	return request({
		url: 'user/update_user',
		method: 'POST',
		data: { token: uni.getStorageSync('token'), ...data },
	})
}

/**
 * 绑定第三方平台
 *
 * @augments platform 平台id
 * @augments unionid 统一code
 * @return 受影响的条数
 */
export const bindPlatform = (data : {
	token ?: string
	platform : AuthServiceId
	unionid : string
}) : Promise<number> => {
	return request({
		url: 'user/bind_platform',
		method: 'POST',
		data: { token: uni.getStorageSync('token'), ...data },
	})
}